package com.qyer.lxp.service.price;

import com.qyer.lxp.model.price.normal.DailyPrice;
import com.qyer.lxp.model.price.normal.Price;
import com.qyer.lxp.model.price.parameter.AvailableDatesRequest;
import com.qyer.lxp.model.price.parameter.PeriodPriceQueryRequest;
import com.qyer.lxp.model.price.parameter.PriceQueryRequest;

import java.util.Date;
import java.util.List;

/**
 * 力行获取价格服务接口类
 * Created by jiangping on 16/5/18.
 */
public interface IPriceService {

    /**
     * 据销售项目 code 和日期查询价格信息。如果是产品更新,
     * 建议使用下 面的 getPriceByPeriod 批量获取价格。
     * @param priceQueryRequest 调取力行接口需要的参数
     * @return  返回查询条件内的价钱
     * @throws Exception
     */
    public List<Price> getPriceByDay(PriceQueryRequest priceQueryRequest);

    /**
     * 获取销售项目或者产品某一段时间的价格信息接口
     *
     * 根据销售项目 code 或者产品 code 和日期查询价格信息。
     * 每次最多只返回 31 天的价格数据。
     * @param periodPriceQueryRequest 调取力行接口需要的参数
     * @return  返回查询条件内的价钱
     * @throws Exception
     */
    public List<DailyPrice> getPriceByPeriod(PeriodPriceQueryRequest periodPriceQueryRequest);


    /**
     * 获取销售项目的可售日期业务接口
     * @param availableDatesRequest 销售code
     * @return  返回可售日期
     * @throws Exception
     */
    public List<Date> getAvailableDates(AvailableDatesRequest availableDatesRequest);

    /**
     * 批量插入产品价钱
     * @param prices   产品价钱相关list
     * @return
     */
    public void insertBatch(List<Price> prices);

    /**
     * 根据量获取到的产品信息,将产品价钱批量插入到数据库
     * @param productCodeList 产品号列表
     */
    public void insertBatchPrice(List<String> productCodeList);

    /**
     * 根据量获取到的产品信息,将产品价钱批量更新到数据库
     * @param productCodeList 产品号列表
     */
    public void updateBatchPrice(List<String> productCodeList);

    /**
     * 获取价格日历信息
     * @param saleCode
     * @return
     */
    public List<Price> getPrice(String saleCode);

    /**
     * 根据price中指定的属性查询日期价格表的数据
     * @param price 与日期价格表对应的查询字段
     * @return  返回结果list
     */
    public List<Price> selectPrice(Price price);

    /**
     * 按日期删除价格
     * @param price  删除条件
     * @return  返回删除后的结果
     * @throws Exception
     */
    public int deleteBatchByPrice(Price price);

    /**
     * 按套餐code,规格id,变化日期进行价格更新
     * @param price 需要更新的数据与更新条件
     * @return  返回最终结果
     */
    public int updatePriceBySaleCode(Price price);

    /**
     * 按条件统计数量
     * @param price 统计数量查询条件
     * @return  返回统计结果
     */
    public int countPrice(Price price);

}
